Over the past three decades, computing, especially online computing, has proliferated to the point of ubiquity. Whereas computing and computer systems were initially common only in enterprise settings, most individuals and families today own and regularly use a networked computing device of some type. The emergence of the Internet has redefined the traditional paradigm of computing, shifting the locus of most computing tasks from non-networked mainframes or personal computers serving a limited number of users to networked server devices that serve potentially millions of users a day. In particular, the recent phenomenon of cloud computing has given rise to online portals and applications that run on server architectures and are used to provide specialized online services to millions of end users. One such portal, Yahoo.com, provides dozens of online applications performing a variety of different functions, such as YAHOO! Mail, YAHOO! Finance, YAHOO! Games, and YAHOO! Messenger. Due to the high volume of users that such online applications serve, slight improvements or degradations in an application's performance can have a significant effect on response time, stability, and other factors that affect user experience. In addition, the complexity of online applications has grown as application providers have sought to take advantage of hardware advances and increases in bandwidth and data transfer rates to provide increasingly sophisticated functionality to end users.
Thus, technologies that can effectively monitor and analyze the performance of an application have become increasingly important. Though such tools do exist, many currently available solutions have not kept pace with the growing sophistication of online applications. Currently available solutions do not provide a sufficient level of detail in their performance analysis, cause an unacceptable amount of disruption in the operation of the application, or add too much overhead to the application's running time. Consequently, there is a need for a technique for analyzing the performance of an application that provides low-level performance detail without disrupting operation or adding overhead. As will be demonstrated, the embodiments disclosed herein provide such a technique in an elegant manner.